home *** CD-ROM | disk | FTP | other *** search
/ Amiga Inside! / Amiga FD Inside (1995)(Ultramax).iso / forumamiga / ausgabe09 / texte / copymem < prev    next >
Text File  |  1992-09-05  |  2KB  |  42 lines

  1.                                                              André Voget
  2. Die Exec-Routine "CopyMem"
  3. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. Wie bekannt sein dürfte, kann man in Gfa-Basic alle Library-Routinen mit
  5. Namen  aufrufen.  Seltsamerweise  ist  dies  nicht möglich, wenn man die
  6. "CopyMem"-Routine aus der Exec-Library benutzen will! Diese kann nämlich
  7. als Ersatz für den "BMOVE"-Befehl von Gfa-Basic dienen. Als Lösung stel­
  8. le ich eine Unterroutine vor, die  die  CopyMem()-Routine  aufruft.  Die
  9. Parameter sind dieselben wie beim "BMOVE"-Befehl:
  10.  
  11. von_adr%       = Adresse des Quellbereiches
  12. bis_adr%       = Adresse des Zielbereiches
  13. anzahl%        = Größe des zu kopierenden Speicherbereiches in Bytes
  14.  
  15. Um  die  Routine  nutzen  zu  können,  muß  vorher   im    Hauptprogramm
  16. "DIM m68%(15)" stehen! Hier ist sie:
  17.  
  18. PROCEDURE copymem(von_adr%,bis_adr%,anzahl%)
  19.   m68%(0)=anzahl%
  20.   m68%(8)=von_adr%
  21.   m68%(9)=bis_adr%
  22.   m68%(14)=LONG{4}             ! Execbase
  23.   RCALL LONG{4}-624,m68%()     ! CopyMem()
  24. RETURN
  25.  
  26. Von  dieser  Systemroutine  gibt  es auch eine "Quick"-Variante, die den
  27. Speicher viel schneller verschiebt. ACHTUNG: die Adressen des  Quell-und
  28. des  Zielbereiches  müssen  bei  "CopyMemQuick" an Speicherbereiche, die
  29. durch vier teilbar sind, liegen, ansonsten droht eine  Guru  Meditation!
  30. Um  sicherzugehen,  sollte man sich den Speicher mit "AllocMem" oder dem
  31. "MALLOC"-Befehl beschaffen, da deren Speicher an einer durch acht  teil­
  32. baren Adresse liegt. Hier die "Quick"-Variante:
  33.  
  34. PROCEDURE copymemquick(von_adr%,bis_adr%,anzahl%)
  35.   m68%(0)=anzahl%
  36.   m68%(8)=von_adr%
  37.   m68%(9)=bis_adr%
  38.   m68%(14)=LONG{4}             ! Exec-Library-Adresse
  39.   RCALL LONG{4}-630,m68%()     ! CopyMemQuick()
  40. RETURN
  41.  
  42.